fread関数は、ファイルからレコード単位に入力します。主に、バイナリデータを入力するために使用します。

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

*ptrは入力したデータを格納する領域を指定します。
sizeはレコード長をバイト単位で指定します。
nmembは入力するレコードの個数を指定します。
*streamはfopen関数で取得した、ファイルポインタを指定します。

戻り値として、入力したレコードの個数を返します。EOF又は、エラーの場合は、指定した個数より小さな値(又は0)を返します。

次の例題プログラムは番号、身長、体重、肥満度(BMI)を登録してあるbmi.datファイル(固定長バイナリレコード形式)から入力して、それぞれの値を出力します。

プログラム 例

#include <stdio.h>

int main()
{
  struct bmi_type {
    int     number;         /* 番号 */
    double  weight;         /* 体重 */
    double  height;         /* 身長 */
    double  bmi;            /* 肥満度 */
  } bmi_rec;                /* 肥満度データ */

  FILE     *fp;
  int      return_code = 0;

  if ((fp = fopen('bmi.dat', 'rb')) != NULL) {
    while(fread(&bmi_rec, sizeof(bmi_rec), 1, fp) == 1) {
      printf('%03d番目\n', bmi_rec.number);
      printf('\t体重:%.2fKg\n', bmi_rec.weight);
      printf('\t身長:%.2fCm\n', bmi_rec.height);
      printf('\t肥満度(BMI):%.2f\n', bmi_rec.bmi);
    }

    fclose(fp);
  }
  else {
    printf('ファイルのオープンに失敗しました\n');
    return_code = 1;
  }

  return return_code;
}

例の実行結果

$ ./fread.exe
001番目
        体重:67.50Kg
        身長:175.50Cm
        肥満度(BMI):21.92
002番目
        体重:88.00Kg
        身長:187.80Cm
        肥満度(BMI):24.95
003番目
        体重:54.30Kg
        身長:164.00Cm
        肥満度(BMI):20.19
$